The need to transfer data is ubiquitous in modern computer systems. For example, data is often generated remotely from a location in which the data is stored. Sometimes, data needs to be transferred from one computer system to another for various purposes, such as processing, backup and the like. Further, as data capturing techniques become more advanced, the amount of data transferred is increasing. Modern computer networks, such as the Internet and mobile communications networks, provide complex and generally effective infrastructure for data transfer.
Despite this, however, various limitations impede the ability to transfer data from one point to another. For example, the transmission control protocol (TCP) limits the amount of data that can be sent or received before the data transfer must be acknowledged by both parties. The time it takes to acknowledge a packet is time not spent transferring. As another example, encrypting data before transfer can slow the transfer process based on the processing capabilities of the encrypting and/or decrypting system. Also, a receiving system may be limited in the rate at which it can receive data due to various factors, such as file server disk speed. In addition, conventional techniques for transferring data often heavily utilize some resources (processing ability, bandwidth, etc.) while leaving other resources underutilized.